{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
{\fonttbl\f0\froman\fcharset0 Times-Roman;\f1\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;\red0\green68\blue254;\red0\green49\blue224;\red255\green39\blue18;
}
\paperw11900\paperh16840\margl1440\margr1440\vieww22020\viewh13520\viewkind0
\deftab720
\pard\pardeftab720\sa380

\f0\b\fs48 \cf2 Notes:\

\f1\b0\fs24 \cf0 In 
\b Expressions -> Relational_Operator -> IN 
\b0 is being ignored.\
In 
\b Expressions -> Multiplication_Operator -> DIV | MOD | AND 
\b0 are being ignored.
\f0\b\fs48 \
\
Definitions of Syntactic Classes\
\pard\pardeftab720\sa360

\fs38 \cf0 Programs and Blocks\
\pard\pardeftab720

\b0\fs32 \cf0 program =\
\pard\pardeftab720
\cf3 \ul \ulc3 program-heading\cf0 \ulnone  \cf3 \ul block\cf0 \ulnone  "." .\
program-heading =\
\pard\pardeftab720

\b \cf0 program
\b0  \cf3 \ul identifier\cf0 \ulnone  "(" \cf3 \ul identifier-list\cf0 \ulnone  ")" ";" .\
block =\
\pard\pardeftab720
\cf3 \ul declaration-part\cf0 \ulnone  \cf3 \ul statement-part\cf0 \ulnone  .\
declaration-part =\
[ \cf3 \ul label-declaration-part\cf0 \ulnone  ]\
[ \cf3 \ul constant-definition-part\cf0 \ulnone  ]\
[ \cf3 \ul type-definition-part\cf0 \ulnone  ]\
[ \cf3 \ul variable-declaration-part\cf0 \ulnone  ]\
\cf3 \ul procedure-and-function-declaration-part\cf0 \ulnone  .\
label-declaration-part =\
\pard\pardeftab720

\b \cf0 label
\b0  \cf3 \ul label\cf0 \ulnone  \{ "," \cf3 \ul label\cf0 \ulnone  \} ";" .\
constant-definition-part =\

\b const
\b0  \cf3 \ul constant-definition\cf0 \ulnone  ";" \{ \cf3 \ul constant-definition\cf0 \ulnone  ";" \} .\
constant-definition =\
\pard\pardeftab720
\cf3 \ul identifier\cf0 \ulnone  "=" \cf3 \ul constant\cf0 \ulnone  .\
type-definition-part =\
\pard\pardeftab720

\b \cf0 type
\b0  \cf3 \ul type-definition\cf0 \ulnone  ";" \{ \cf3 \ul type-definition\cf0 \ulnone  ";" \} .\
type-definition =\
\pard\pardeftab720
\cf3 \ul identifier\cf0 \ulnone  "=" \cf3 \ul type\cf0 \ulnone  .\
variable-declaration-part =\
\pard\pardeftab720

\b \cf0 var
\b0  \cf3 \ul variable-declaration\cf0 \ulnone  ";" \{ \cf3 \ul variable-declaration\cf0 \ulnone  ";" \} .\
variable-declaration =\
\pard\pardeftab720
\cf3 \ul identifier-list\cf0 \ulnone  ":" \cf3 \ul type\cf0 \ulnone  .\
procedure-and-function-declaration-part =\
\{ (\cf3 \ul procedure-declaration\cf0 \ulnone  | \cf3 \ul function-declaration\cf0 \ulnone ) ";" \} .\
procedure-declaration =\
\cf3 \ul procedure-heading\cf0 \ulnone  ";" \cf3 \ul procedure-body\cf0 \ulnone  |\
\cf3 \ul procedure-heading\cf0 \ulnone  ";" \cf3 \ul directive\cf0 \ulnone  |\
\cf3 \ul procedure-identification\cf0 \ulnone  ";" \cf3 \ul procedure-body\cf0 \ulnone  .\
procedure-body =\
\cf3 \ul block\cf0 \ulnone  .\
function-declaration =\
\cf3 \ul function-heading\cf0 \ulnone  ";" \cf3 \ul function-body\cf0 \ulnone  |\
\cf3 \ul function-heading\cf0 \ulnone  ";" \cf3 \ul directive\cf0 \ulnone  |\
\cf3 \ul function-identification\cf0 \ulnone  ";" \cf3 \ul function-body\cf0 \ulnone  .\
function-body =\
\cf3 \ul block\cf0 \ulnone  .\
directive =\
\pard\pardeftab720

\b \cf0 forward
\b0  | compiler-defined-directives .\
statement-part =\

\b begin
\b0  \cf3 \ul statement-sequence\cf0 \ulnone  
\b end
\b0  .\
\pard\pardeftab720\sa160
\cf0 \
\pard\pardeftab720\sa360

\b\fs38 \cf0 Procedure and Function Definitions\
\pard\pardeftab720

\b0\fs32 \cf0 procedure-heading =\
\pard\pardeftab720

\b \cf0 procedure
\b0  \cf3 \ul identifier\cf0 \ulnone  [ \cf3 \ul formal-parameter-list\cf0 \ulnone  ] .\
function-heading =\

\b function
\b0  \cf3 \ul identifier\cf0 \ulnone  [ \cf3 \ul formal-parameter-list\cf0 \ulnone  ] ":" \cf3 \ul result-type\cf0 \ulnone  .\
result-type =\
\pard\pardeftab720
\cf3 \ul type-identifier\cf0 \ulnone  .\
procedure-identification =\
\pard\pardeftab720

\b \cf0 procedure
\b0  \cf3 \ul procedure-identifier\cf0 \ulnone  .\
function-identification =\

\b function
\b0  \cf3 \ul function-identifier\cf0 \ulnone  .\
formal-parameter-list =\
"(" \cf3 \ul formal-parameter-section\cf0 \ulnone  \{ ";" \cf3 \ul formal-parameter-section\cf0 \ulnone  \} ")" .\
formal-parameter-section =\
\pard\pardeftab720
\cf3 \ul value-parameter-section\cf0 \ulnone  |\
\cf3 \ul variable-parameter-section\cf0 \ulnone  |\
\cf3 \ul procedure-parameter-section\cf0 \ulnone  |\
\cf3 \ul function-parameter-section\cf0 \ulnone  .\
value-parameter-section =\
\cf3 \ul identifier-list\cf0 \ulnone  ":" \cf3 \ul parameter-type\cf0 \ulnone  .\
variable-parameter-section =\
\pard\pardeftab720

\b \cf0 var
\b0  \cf3 \ul identifier-list\cf0 \ulnone  ":" \cf3 \ul parameter-type\cf0 \ulnone  .\
procedure-parameter-section =\
\pard\pardeftab720
\cf3 \ul procedure-heading\cf0 \ulnone  .\
function-parameter-section =\
\cf3 \ul function-heading\cf0 \ulnone  .\
parameter-type =\
\cf3 \ul type-identifier\cf0 \ulnone  | \cf3 \ul conformant-array-schema\cf0 \ulnone  .\
conformant-array-schema =\
\cf3 \ul packed-conformant-array-schema\cf0 \ulnone  |\
\cf3 \ul unpacked-conformant-array-schema\cf0 \ulnone  .\
packed-conformant-array-schema =\
\pard\pardeftab720

\b \cf0 packed
\b0  
\b array
\b0  "[ " \cf3 \ul bound-specification\cf0 \ulnone  " ]" 
\b of
\b0  \cf3 \ul type-identifier\cf0 \ulnone  .\
unpacked-conformant-array-schema =\

\b array
\b0  "[ " \cf3 \ul bound-specification\cf0 \ulnone  \{ ";" \cf3 \ul bound-specification\cf0 \ulnone  \} " ]"\

\b of
\b0  (\cf3 \ul type-identifier\cf0 \ulnone  | \cf3 \ul conformant-array-schema\cf0 \ulnone ) .\
bound-specification =\
\pard\pardeftab720
\cf3 \ul identifier\cf0 \ulnone  ".." \cf3 \ul identifier\cf0 \ulnone  ":" \cf3 \ul ordinal-type-identifier\cf0 \ulnone  .\
ordinal-type-identifier =\
\cf3 \ul type-identifier\cf0 \ulnone  .\
\pard\pardeftab720\sa160
\cf0 \
\pard\pardeftab720\sa360

\b\fs38 \cf0 Statements\
\pard\pardeftab720

\b0\fs32 \cf0 statement-sequence =\
\cf3 \ul statement\cf0 \ulnone  \{ ";" \cf3 \ul statement\cf0 \ulnone  \} .\
statement =\
[ \cf3 \ul label\cf0 \ulnone  ":" ] (\cf3 \ul simple-statement\cf0 \ulnone  | \cf3 \ul structured-statement\cf0 \ulnone ) .\
simple-statement =\
[ \cf3 \ul assignment-statement\cf0 \ulnone  | \cf3 \ul procedure-statement\cf0 \ulnone  | \cf3 \ul goto-statement\cf0 \ulnone  ] .\
assignment-statement =\
(\cf3 \ul variable\cf0 \ulnone  | \cf3 \ul function-identifier\cf0 \ulnone ) ":=" \cf3 \ul expression\cf0 \ulnone  .\
procedure-statement =\
\cf3 \ul procedure-identifier\cf0 \ulnone  [ \cf3 \ul actual-parameter-list\cf0 \ulnone  ] .\
goto-statement =\
\pard\pardeftab720

\b \cf0 goto
\b0  \cf3 \ul label\cf0 \ulnone  .\
structured-statement =\
\pard\pardeftab720
\cf3 \ul compound-statement\cf0 \ulnone  | \cf3 \ul repetitive-statement\cf0 \ulnone  | \cf3 \ul conditional-statement\cf0 \ulnone  | \cf3 \ul with-statement\cf0 \ulnone  .\
compound-statement =\
\pard\pardeftab720

\b \cf0 begin
\b0  \cf3 \ul statement-sequence\cf0 \ulnone  
\b end
\b0  .\
repetitive-statement =\
\pard\pardeftab720
\cf3 \ul while-statement\cf0 \ulnone  | \cf3 \ul repeat-statement\cf0 \ulnone  | \cf3 \ul for-statement\cf0 \ulnone  .\
while-statement =\
\pard\pardeftab720

\b \cf0 while
\b0  \cf3 \ul expression\cf0 \ulnone  
\b do
\b0  \cf3 \ul statement\cf0 \ulnone  .\
repeat-statement =\

\b repeat
\b0  \cf3 \ul statement-sequence\cf0 \ulnone  
\b until
\b0  \cf3 \ul expression\cf0 \ulnone  .\
for-statement =\

\b for
\b0  \cf3 \ul variable-identifier\cf0 \ulnone  ":=" \cf3 \ul initial-expression\cf0 \ulnone  (
\b to
\b0  | 
\b downto
\b0 ) \cf3 \ul final-expression\cf0 \ulnone  
\b do
\b0  \cf3 \ul statement\cf0 \ulnone  .\
initial-expression =\
\pard\pardeftab720
\cf3 \ul expression\cf0 \ulnone  .\
final-expression =\
\cf3 \ul expression\cf0 \ulnone  .\
conditional-statement =\
\cf3 \ul if-statement\cf0 \ulnone  | \cf3 \ul case-statement\cf0 \ulnone  .\
if-statement =\
\pard\pardeftab720

\b \cf0 if
\b0  \cf3 \ul expression\cf0 \ulnone  
\b then
\b0  \cf3 \ul statement\cf0 \ulnone  [ 
\b else
\b0  \cf3 \ul statement\cf0 \ulnone  ] .\
case-statement =\

\b case
\b0  \cf3 \ul expression\cf0 \ulnone  
\b of
\b0 \
\pard\pardeftab720
\cf3 \ul case-limb\cf0 \ulnone  \{ ";" \cf3 \ul case-limb\cf0 \ulnone  \} [ ";" ]\
\pard\pardeftab720

\b \cf0 end
\b0  .\
case-limb =\
\pard\pardeftab720
\cf3 \ul case-label-list\cf0 \ulnone  ":" \cf3 \ul statement\cf0 \ulnone  .\
case-label-list =\
\cf3 \ul constant\cf0 \ulnone  \{ "," \cf3 \ul constant\cf0 \ulnone  \} .\
with-statement =\
\pard\pardeftab720

\b \cf0 with
\b0  \cf3 \ul record-variable\cf0 \ulnone  \{ "," \cf3 \ul record-variable\cf0 \ulnone  \} 
\b do
\b0  \cf3 \ul statement\cf0 \ulnone  .\
actual-parameter-list =\
"(" \cf3 \ul actual-parameter\cf0 \ulnone  \{ "," \cf3 \ul actual-parameter\cf0 \ulnone  \} ")" .\
actual-parameter =\
\pard\pardeftab720
\cf3 \ul actual-value\cf0 \ulnone  | \cf3 \ul actual-variable\cf0 \ulnone  | \cf3 \ul actual-procedure\cf0 \ulnone  | \cf3 \ul actual-function\cf0 \ulnone  .\
actual-value =\
\cf3 \ul expression\cf0 \ulnone  .\
actual-procedure =\
\cf3 \ul procedure-identifier\cf0 \ulnone  .\
actual-function =\
\cf3 \ul function-identifier\cf0 \ulnone  .\
\pard\pardeftab720\sa160
\cf0 \
\pard\pardeftab720\sa360

\b\fs38 \cf0 Expressions\
\pard\pardeftab720

\b0\fs32 \cf0 expression =\
\cf3 \ul simple-expression\cf0 \ulnone  [ \cf3 \ul relational-operator\cf0 \ulnone  \cf3 \ul simple-expression\cf0 \ulnone  ] .\
simple-expression =\
[ \cf3 \ul sign\cf0 \ulnone  ] \cf3 \ul term\cf0 \ulnone  \{ \cf3 \ul addition-operator\cf0 \ulnone  \cf3 \ul term\cf0 \ulnone  \} .\
term =\
\cf3 \ul factor\cf0 \ulnone  \{ \cf3 \ul multiplication-operator\cf0 \ulnone  \cf3 \ul factor\cf0 \ulnone  \} .\
factor =\
\cf3 \ul variable\cf0 \ulnone  | \cf3 \ul number\cf0 \ulnone  | \cf3 \ul string\cf0 \ulnone  | \cf3 \ul set\cf0 \ulnone  | 
\b nil
\b0  | \cf3 \ul constant-identifier\cf0 \ulnone  | \cf3 \ul bound-identifier\cf0 \ulnone  | \cf3 \ul function-designator\cf0 \ulnone  | "(" \cf3 \ul expression\cf0 \ulnone  ")" | 
\b not
\b0  \cf3 \ul factor\cf0 \ulnone  .\
relational-operator =				
\b \cf4 INCONCLUSO
\b0 \cf0 \
"=" | "<>" | "<" | "<=" | ">" | ">=" | "in" .\
addition-operator =				\
"+" | "-" | 
\b or
\b0  .\
multiplication-operator =			
\b \cf4 INCONCLUSO
\b0 \cf0 \
"*" | "/" | 
\b div
\b0  | 
\b mod
\b0  | 
\b and
\b0  .\
variable =\
\cf3 \ul entire-variable\cf0 \ulnone  | \cf3 \ul component-variable\cf0 \ulnone  | \cf3 \ul referenced-variable\cf0 \ulnone  .\
entire-variable =\
\cf3 \ul variable-identifier\cf0 \ulnone  | \cf3 \ul field-identifier\cf0 \ulnone  .\
component-variable =\
\cf3 \ul indexed-variable\cf0 \ulnone  | \cf3 \ul field-designator\cf0 \ulnone  | \cf3 \ul file-buffer\cf0 \ulnone  .\
indexed-variable =\
\cf3 \ul array-variable\cf0 \ulnone  "[ " \cf3 \ul expression-list\cf0 \ulnone  " ]" .\
field-designator =\
\cf3 \ul record-variable\cf0 \ulnone  "." \cf3 \ul field-identifier\cf0 \ulnone  .\
set =\
"[ " \cf3 \ul element-list\cf0 \ulnone  " ]" .\
element-list =\
[ \cf3 \ul expression\cf0 \ulnone  \{ "," \cf3 \ul expression\cf0 \ulnone  \} ] .\
function-designator =\
\cf3 \ul function-identifier\cf0 \ulnone  [ \cf3 \ul actual-parameter-list\cf0 \ulnone  ] .\
file-buffer =\
\cf3 \ul file-variable\cf0 \ulnone  "^" .\
\pard\pardeftab720\sa160
\cf0 \
\pard\pardeftab720\sa360

\b\fs38 \cf0 Types\
\pard\pardeftab720

\b0\fs32 \cf0 type =\
\cf3 \ul simple-type\cf0 \ulnone  | \cf3 \ul structured-type\cf0 \ulnone  | \cf3 \ul pointer-type\cf0 \ulnone  | \cf3 \ul type-identifier\cf0 \ulnone  .\
simple-type =\
\cf3 \ul subrange-type\cf0 \ulnone  | \cf3 \ul enumerated-type\cf0 \ulnone  .\
enumerated-type =\
"(" \cf3 \ul identifier-list\cf0 \ulnone  ")" .\
subrange-type =\
\cf3 \ul lower-bound\cf0 \ulnone  ".." \cf3 \ul upper-bound\cf0 \ulnone  .\
lower-bound =\
\cf3 \ul constant\cf0 \ulnone  .\
upper-bound =\
\cf3 \ul constant\cf0 \ulnone  .\
structured-type =\
[ 
\b packed
\b0  ] \cf3 \ul unpacked-structured-type\cf0 \ulnone  .\
unpacked-structured-type =\
\cf3 \ul array-type\cf0 \ulnone  | \cf3 \ul record-type\cf0 \ulnone  | \cf3 \ul set-type\cf0 \ulnone  | \cf3 \ul file-type\cf0 \ulnone  .\
array-type =\
\pard\pardeftab720

\b \cf0 array
\b0  "[ " \cf3 \ul index-type\cf0 \ulnone  \{ "," \cf3 \ul index-type\cf0 \ulnone  \} " ]" 
\b of
\b0  \cf3 \ul element-type\cf0 \ulnone  .\
index-type =\
\pard\pardeftab720
\cf3 \ul simple-type\cf0 \ulnone  .\
element-type =\
\cf3 \ul type\cf0 \ulnone  .\
record-type =\
\pard\pardeftab720

\b \cf0 record
\b0  \cf3 \ul field-list\cf0 \ulnone  
\b end
\b0  .\
set-type =\

\b set
\b0  
\b of
\b0  \cf3 \ul base-type\cf0 \ulnone  .\
base-type =\
\pard\pardeftab720
\cf3 \ul type\cf0 \ulnone  .\
file-type =\
\pard\pardeftab720

\b \cf0 file
\b0  
\b of
\b0  \cf3 \ul file-component-type\cf0 \ulnone  .\
file-component-type =\
\pard\pardeftab720
\cf3 \ul type\cf0 \ulnone  .\
pointer-type =\
"^" \cf3 \ul type-identifier\cf0 \ulnone  .\
\pard\pardeftab720\sa160
\cf0 \
\pard\pardeftab720\sa360

\b\fs38 \cf0 Record Fields\
\pard\pardeftab720

\b0\fs32 \cf0 field-list =\
[ (\cf3 \ul fixed-part\cf0 \ulnone  [ ";" \cf3 \ul variant-part\cf0 \ulnone  ] | \cf3 \ul variant-part\cf0 \ulnone ) [ ";" ] ] .\
fixed-part =\
\cf3 \ul record-section\cf0 \ulnone  \{ ";" \cf3 \ul record-section\cf0 \ulnone  \} .\
record-section =\
\cf3 \ul identifier-list\cf0 \ulnone  ":" \cf3 \ul type\cf0 \ulnone  .\
variant-part =\
\pard\pardeftab720

\b \cf0 case
\b0  \cf3 \ul tag-field\cf0 \ulnone  \cf3 \ul type-identifier\cf0 \ulnone  
\b of
\b0  \cf3 \ul variant\cf0 \ulnone  \{ ";" \cf3 \ul variant\cf0 \ulnone  \} .\
tag-field =\
[ \cf3 \ul identifier\cf0 \ulnone  ":" ] .\
variant =\
\pard\pardeftab720
\cf3 \ul case-label-list\cf0 \ulnone  ":" "(" \cf3 \ul field-list\cf0 \ulnone  ")" .\
\pard\pardeftab720\sa160
\cf0 \
\pard\pardeftab720\sa360

\b\fs38 \cf0 Input/Output\
\pard\pardeftab720

\b0\fs32 \cf0 output-list =\
\cf3 \ul output-value\cf0 \ulnone  \{ "," \cf3 \ul output-value\cf0 \ulnone  \} .\
output-value =\
\cf3 \ul expression\cf0 \ulnone  [ ";" \cf3 \ul field-width\cf0 \ulnone  [ ":" \cf3 \ul fraction-length\cf0 \ulnone  ] ] .\
field-width =\
\cf3 \ul expression\cf0 \ulnone  .\
fraction-length =\
\cf3 \ul expression\cf0 \ulnone  .
\b\fs38 \
\
\pard\pardeftab720\sa360
\cf0 Variable and Identifier Categories
\b0\fs32 \
\pard\pardeftab720
\cf0 file-variable =\
\cf3 \ul variable\cf0 \ulnone  .\
referenced-variable =\
\cf3 \ul pointer-variable\cf0 \ulnone  "^" .\
record-variable =\
\cf3 \ul variable\cf0 \ulnone  .\
pointer-variable =\
\cf3 \ul variable\cf0 \ulnone  .\
actual-variable =\
\cf3 \ul variable\cf0 \ulnone  .\
array-variable =\
\cf3 \ul variable\cf0 \ulnone  .
\b\fs38 \
\
\pard\pardeftab720\sa360
\cf0 Low Level Definitions \
\pard\pardeftab720

\b0\fs32 \cf0 variable-list =\
\pard\pardeftab720
\cf3 \ul \ulc3 variable\cf0 \ulnone  \{ "," \cf3 \ul variable\cf0 \ulnone  \} : .\
expression-list =\
\cf3 \ul expression\cf0 \ulnone  \{ "," \cf3 \ul expression\cf0 \ulnone  \} .\
letter =							
\b \cf4 OMITIDO
\b0 \cf0 \
"A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" .			\
digit =							
\b \cf4 OMITIDO
\b0 \cf0 \
"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" .\
string-character =					
\b \cf4 OMITIDO
\b0 \cf0 \
any-character-except-quote | "''" .\
label =\
\cf3 \ul integer-number\cf0 \ulnone  .\
constant =\
[ \cf3 \ul sign\cf0 \ulnone  ] (\cf3 \ul constant-identifier\cf0 \ulnone  | \cf3 \ul number\cf0 \ulnone ) | \cf3 \ul string\cf0 \ulnone  .\
\
\
}